/**
 * 按题意操作即可，规模不大
 * 先向一边移动，如果元素为零就一直走，否则将元素减一，反向走，如此反复。
 * 最开始选择一个位置与一个方向，如果最终使得全零，认为该位置和方向有效
 * 问一共有多少个有效的
 */
class Solution {
public:
    int countValidSelections(vector<int>& nums) {
        int ans = 0;
        for(int i=0,n=nums.size();i<n;++i){
            if(nums[i] == 0){
                if(f(nums, i, -1)) ans += 1;
                if(f(nums, i, +1)) ans += 1;
            }
        }
        return ans; 
    }

    bool f(vector<int> vec, int pos, int offset){
        return dfs(vec, pos, offset);
    }

    bool dfs(vector<int> & vec, int pos, int offset){
        if(pos == 0 and offset == -1){
            if(0 == accumulate(vec.begin(), vec.end(), 0)){
                return true;
            }
            return false;
        }
        if(pos == vec.size() - 1 and offset == +1){
            if(0 == accumulate(vec.begin(), vec.end(), 0)){
                return true;
            }
            return false;
        }

        pos = pos + offset;
        if(vec[pos]){
            vec[pos] -= 1;
            return dfs(vec, pos, offset * -1);
        }

        return dfs(vec, pos, offset);
    }

};